﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Entidades.Sistema.Venta;

namespace Modelo.Sistema.Venta
{
    public class CatalogoCliente
    {
        private List<Cliente> Col_cliente;

        public CatalogoCliente()
        {
            Col_cliente = Mapping.Sistema.Venta.MappingCliente.ConsultarClientes();
        }

        public ReadOnlyCollection<Cliente> ListarCliente()
        {
            return Col_cliente.AsReadOnly();
        }

        public bool AgregarCliente(Cliente oCliente)
        {
            oCliente.IdCliente = GetMayor();

            oCliente.IdCliente = oCliente.IdCliente + 1;
            Col_cliente.Add(oCliente);
            return Mapping.Sistema.Venta.MappingCliente.AgregarCliente(oCliente);
        }

        public bool EliminarCliente(Cliente oCliente)
        {
            //oCliente.IdCliente = GetMayor();
            Col_cliente.RemoveAll(x => x.IdCliente == oCliente.IdCliente);
            return Mapping.Sistema.Venta.MappingCliente.EliminarCliente(oCliente);
        }
        public void ModificarCliente(Cliente oCliente)
        {
            Mapping.Sistema.Venta.MappingCliente.ModificarCliente(oCliente);
            Col_cliente.Remove(oCliente);
            Col_cliente.Add(oCliente);
        }
        public Cliente BuscarCliente(int idCliente)
        {
            return this.Col_cliente.Find(unid => unid.IdCliente == idCliente);
        }
        public bool ValidarExistencia(Cliente oCliente)
        {
            if (this.Col_cliente.Count(unid => unid.IdCliente == oCliente.IdCliente) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        public Int32 GetMayor()
        {
            if (Col_cliente.Count == 0) return 0;

            Int32 maxIdCliente =
                (from pro in Col_cliente
                 select pro.IdCliente)
                .Max();

            return maxIdCliente + 1;
        }
    }
}
